#ifndef MYSQLPOOL_H
#define MYSQLPOOL_H
#include <queue>
#include <mutex>
#include <thread>
#include"mysqlConnection.h"
#include <condition_variable>

#define RUNNING 0
#define STOP 1
class mysqlPool{
public:
    mysqlPool();    //构造函数，创建连接池
    std::mutex mtx;
    std::shared_ptr<mysqlConnection> get_con();
    void return_con(std::shared_ptr<mysqlConnection>&); //always return true
    int pool_size;  //总的实例个数，不会改变。除非获取时不够了，那么就会再度建立连接
    std::string hostName;    //数据库信息
    std::string schema; //指定的数据库
    std::string userName;
    std::string passwd;
    //是否要弄一个线程去在间隔好长一段事件去执行简单的sql,避免连接失效
    std::thread _thread;
    std::condition_variable cond_var;
    bool stop_flag; 
    ~mysqlPool(){
        //std::lock_guard<std::mutex>l_g(mtx);   //就不加锁了，运行到此需要结束时，已经不可能有需要访问mysql实例的情况了
        
        while(_pool.size()){
            _pool.pop();
        }
        this->stop_flag=STOP;
        cond_var.notify_all();
        _thread.join();
        std::cout<<"mysql_pool清理完，并且对应的心跳线程也结束了"<<std::endl;
    }

private:
    std::queue<std::shared_ptr<mysqlConnection>>_pool;
};



#endif